﻿using System.Data.EntityClient;
using System.ComponentModel.DataAnnotations;
using System.Configuration;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Objects;
using web_uchet.Security.Interfaces;
//using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
namespace web_uchet.Models
{
    /// <summary>
    /// There are no comments for ModelWebUchetCon in the schema.
    /// </summary>
    public partial class ModelWebUchetCon
    {
        //private const byte ConnectionPoolCount = 5;
        /// <summary>
        /// Now it's not a single tone
        /// </summary>
        public static EntityConnection SingleToneConnection
        {
            get 
            {
                //EntityConnection Con=null;
                //foreach(var e in ModelWebUchetCon._SingleToneConnections)
                //if (e.State==ConnectionState.Closed) {Con=e; break;}

                //if (Con == null) Con = ModelWebUchetCon._SingleToneConnections[ModelWebUchetCon.R.Next(0, ConnectionPoolCount)];
                //return Con; 
                return new EntityConnection(
                   ConfigurationManager.ConnectionStrings["ModelWebUchetCon"].ConnectionString);
            }
        }
        //private static Random R= new Random();
        //private static EntityConnection[] _SingleToneConnections = new EntityConnection[ConnectionPoolCount];
        //static ModelWebUchetCon()
        //{
        //    for (int i = 0; i < ConnectionPoolCount; i++)
        //    ModelWebUchetCon._SingleToneConnections[0] = new EntityConnection(
        //        ConfigurationManager.ConnectionStrings["ModelWebUchetCon"].ConnectionString);
        //}
    }
    public static class EFExtensions
    {
        public static T LoadByKey<T>(this ObjectContext context, String propertyName, Object keyValue)
        {
            IEnumerable<KeyValuePair<string, object>> entityKeyValues =
               new KeyValuePair<string, object>[] {
           new KeyValuePair<string, object>(propertyName, keyValue) };

            // Create the  key for a specific SalesOrderHeader object. 
            EntityKey key = new EntityKey(context.GetType().Name + "." + typeof(T).Name, entityKeyValues);
            return (T)context.GetObjectByKey(key);
        }
    }

    [MetadataType(typeof(ПользовательMetaData))]
    public partial class Пользователь : IUser
    {       
        public string Roles
        {
            get
            {
                return System.Web.Security.Roles.GetRolesForUser(this.ASPNetUser.UserName).TransToString(true);
            }
        }
    }
    public partial class ПользовательMetaData
    {
        //[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Введите имя пользователя")]
        //[NotNullOrEmptyValidator(MessageTemplate="Введите настоящее ФИО пользователя")]
        object Имя_Настоящее{get; set;}
    }
    [MetadataType(typeof(КомпанияMetaData))]
    public partial class Компания : ICompany
    {        
    }
    public partial class КомпанияMetaData
    {
        //[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Введите ФИО Представителя")]
        //[NotNullOrEmptyValidator(MessageTemplate = "Введите ФИО Представителя")]
        object ФИО_Представителя { get; set; }

        //[System.ComponentModel.DataAnnotations.Required(ErrorMessage = "Введите название компании")]
        //[NotNullOrEmptyValidator(MessageTemplate = "Введите название компании")]
        object Название { get; set; }

        //[NotNullOrEmptyValidator(MessageTemplate = "Введите контакты компании")]
        object Контакты { get; set; }
    }

    public partial class Заказ
    {
        //partial void OnОтмененChanging(bool value)
        //{
        //    if (this.Выполнено && value) throw new ValidationException("Нельзя выпольнить и отменить заказ односременно");
        //}
        //partial void OnВыполненоChanging(bool value)
        //{
        //    if (this.Отменен && value) throw new ValidationException("Нельзя выпольнить и отменить заказ односременно");
        //}        
    }
}